﻿using System;
using System.Data;
using System.Windows.Forms;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_ViewGeneral
{
    /// <summary>
    /// Formulario para cargar los repuestos de un presupuesto
    /// </summary>
    public partial class frmRepuestosPre : Form
    {
        static string[] codigos = null;
        static DataTable repuestos = null;
        BLRepuestos createRepuestos = BLFactoryPresupuesto.createRepuesto();

        public frmRepuestosPre()
        {
            InitializeComponent();
        }

        private void btnCargar_Click(object sender, EventArgs e)
        {
            frmRepuestos repuestos = new frmRepuestos();
            repuestos.FormClosed += new FormClosedEventHandler(repuestos_FormClosed);
            repuestos.Show();
        }

        private void repuestos_FormClosed(object sender, FormClosedEventArgs e)
        {
            codigos = frmRepuestos.pasarCodigos();
            if (null != codigos)
            {
                cargarTabla();    
            }
            
        }

        /// <summary>
        /// Carga la tabla con los repuestos
        /// </summary>
        private void cargarTabla()
        {
            try
            {
                if (null != codigos)
                {
                    dgvRepuestos.Rows.Clear();
                    foreach (string codigo in codigos)
                    {
                        repuestosDTO r = createRepuestos.getRepuesto(codigo);
                        if (null != r)
                        {
                            dgvRepuestos.Rows.Add(new object[] {r.Codigo, r.Descripcion, r.Precio, "", "" });
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
        
        }

        /// <summary>
        /// Intercambia la tabla de repuestos
        /// </summary>
        /// <returns>Devuelve una tabla con los repuestos cargados</returns>
        public static DataTable pasarTabla()
        {
            return repuestos;
        }

        /// <summary>
        /// Carga la tabla
        /// </summary>
        /// <param name="rep">Determina la tabla a cargar</param>
        public void cargarRepuestos(DataTable rep)
        {
            repuestos = rep;
        }

        private void frmRepuestosPre_Load(object sender, EventArgs e)
        {
            if (null != repuestos)
            {
                foreach (DataRow dr in repuestos.Rows)
                {
                    dgvRepuestos.Rows.Add(new object[] {dr[0].ToString(), dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()});
                };
            }
        }

        private void btnAsignar_Click(object sender, EventArgs e)
        {
            if (verificar())
            {
                repuestos = new DataTable();
                repuestos.Columns.Add("Código");
                repuestos.Columns.Add("Descripción");
                repuestos.Columns.Add("Precio Unitario");
                repuestos.Columns.Add("Cantidad");
                repuestos.Columns.Add("Precio Total");

                foreach (DataGridViewRow dr in dgvRepuestos.Rows)
                {
                    repuestos.Rows.Add(new object[] {dr.Cells["Código"].Value, dr.Cells["Descripción"].Value
                        , dr.Cells["Precio_Unitario"].Value, dr.Cells["Cantidad"].Value, dr.Cells["Precio_Total"].Value });
                }

                this.Close();
                this.Dispose();
            }
        }
        

        private bool verificar()
        {
            bool verificado = false;

            if (dgvRepuestos.Rows[0].Cells[0].Value.Equals(""))
            {
                errorProvider1.SetError(btnAsignar, "Seleccione un repuesto por lo menos");
            }
            else
            {
                errorProvider1.SetError(btnAsignar, String.Empty);
                verificado = true;
            }

            return verificado;
        }

        private void dgvRepuestos_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            double precioTotal = Convert.ToDouble(dgvRepuestos.Rows[e.RowIndex].Cells["Cantidad"].Value) * Convert.ToDouble(dgvRepuestos.Rows[e.RowIndex].Cells["Precio_Unitario"].Value);
            dgvRepuestos.Rows[e.RowIndex].Cells["Precio_Total"].Value = precioTotal.ToString();
        }
    }
}
